package com.day17;

import org.junit.Test;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * jdk8之前日期和时间的API测试
 */
public class DateTimeTest {







    /**
     * Calendar日历类(抽象类)的使用
     */
    @Test
    public void test4() {
        //1.实例化
        //方式一:创建其子类的对象GregorianCalendar
        //方式二:调用其静态方法getInstance();
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar.getClass());

        //2.常用方法
        //get()
        int days = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(days);
        //输出这一年的第几天
        System.out.println(calendar.get(Calendar.DAY_OF_YEAR));

        //set()
        calendar.set(Calendar.DAY_OF_MONTH,22);
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));


        //add()


        //getTime()



        //setTime()



    }


    /**
     * jdk 8 之前的日期时间的API测试
     * 1.System类中的currentTimeMillis()
     * 2.java.util.Date和子类java.sql.Date
     * 3.SimpleDateFormat
     * 4.Calendar
     */
    @Test
    public void test3() throws ParseException {
        /**
         * SimpleDateFormat的使用:SimpleDateFormat对日期Date类的格式化和解析
         *
         *  1.两个操作
         *      1.1格式化: 日期--->字符串
         *      1.2解析:格式化的逆过程: 字符串--->日期
         *  2.SimpleDateFormat的实例化
         */
        //实例化SimpleDateFormat
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat();

        //格式化: 日期 -->字符串
        Date date = new Date();
        System.out.println(date);

        String format = simpleDateFormat.format(date);
        System.out.println(format);

        //解析:格式化的逆过程 字符串--->日期
        String str = "20-1-30 上午11:41";
        Date date1 = simpleDateFormat.parse(str);
        System.out.println(date1);


        SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyyy.MMMMM.dd GGG hh:mm aaa");
        String format1 = simpleDateFormat1.format(date);
        System.out.println(format1);

        //格式化
        SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        String format2 = simpleDateFormat2.format(date);
        System.out.println(format2);

        //解析:要求字符串必须符合SimpleDateFormat识别的格式(通过构造器参数体现)
        //否则就会抛出异常
        Date parse = simpleDateFormat2.parse("2020-02-18 11:48:27");
        System.out.println(parse);

        //对java.sql.Date进行格式化
        SimpleDateFormat simpleDateFormat3 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        java.sql.Date date2 = new java.sql.Date(new Date().getTime());
        String format3 = simpleDateFormat3.format(date2);
        System.out.println(format3);

    }


    /**
     * java.util.Date类
     * java.sql.Date类
     * <p>
     * <p>
     * 1.两个构造器的使用
     * <p>
     * 2.两个方法的使用
     * >toString():显示当前的年月日时分秒 yyyyMMddHHmmss
     * >getTime():获取当前date对象对应的时间戳，毫秒数
     * <p>
     * <p>
     * java.sql.Date:对应着数据库中的日期类型的变量
     */

    @Test
    public void test2() {

        //构造器一:
        Date date = new Date();
        System.out.println(date.toString()); //Wed Jan 29 13:26:48 CST 2020

        System.out.println(date.getTime()); //输出毫秒数

        //构造器二:
        Date date1 = new Date(2012, 12, 20);

        //构造器三: 创建毫秒书的date对象
        Date date2 = new Date(1580275777476L);
        System.out.println(date2.clone());


        java.sql.Date date3 = new java.sql.Date(1580275777476L);

        System.out.println(date3.toString());

        //把util.Date转换成sql.Date
        //情况一
        Date date4 = new java.sql.Date(1580275777476L);
        java.sql.Date date5 = (java.sql.Date) date4;

        //情况二:
        Date date6 = new Date();
        java.sql.Date date7 = new java.sql.Date(date6.getTime());


    }


    //1.System类中的currentTimeMillis
    @Test
    public void test1() {
        //称为时间戳
        long currentTimeMillis = System.currentTimeMillis();//输出的毫秒，1970年1月1日0分0秒到现在的时间差

        System.out.println(currentTimeMillis);

    }
}
